diff -Nuar a/src/linguist/lupdate/cpp_clang.cpp b/src/linguist/lupdate/cpp_clang.cpp
--- a/src/linguist/lupdate/cpp_clang.cpp	2022-09-23 14:50:40.000000000 +0300
+++ b/src/linguist/lupdate/cpp_clang.cpp	2023-01-19 11:46:35.771012198 +0300
@@ -243,40 +243,37 @@
 static clang::tooling::ArgumentsAdjuster getClangArgumentAdjuster()
 {
     const QByteArrayList compilerIncludeFlags = getIncludePathsFromCompiler();
-    return [=](const clang::tooling::CommandLineArguments &args,
-               llvm::StringRef /*unused*/) {
-        clang::tooling::CommandLineArguments adjustedArgs;
-        for (size_t i = 0, e = args.size(); i < e; ++i) {
-            llvm::StringRef arg = args[i];
-            // FIXME: Remove options that generate output.
-            if (!arg.startswith("-fcolor-diagnostics") && !arg.startswith("-fdiagnostics-color"))
-                adjustedArgs.push_back(args[i]);
-        }
-        adjustedArgs.push_back("-fparse-all-comments");
-        adjustedArgs.push_back("-nostdinc");
+    return [=](const clang::tooling::CommandLineArguments &args, llvm::StringRef /*unused*/) {
+        clang::tooling::CommandLineArguments adjustedArgs(args);
+        clang::tooling::CommandLineArguments adjustedArgsTemp;
+
+        adjustedArgsTemp.push_back("-fparse-all-comments");
+        adjustedArgsTemp.push_back("-nostdinc");

         // Turn off SSE support to avoid usage of gcc builtins.
         // TODO: Look into what Qt Creator does.
         // Pointers: HeaderPathFilter::removeGccInternalIncludePaths()
         //           and gccInstallDir() in gcctoolchain.cpp
         // Also needed for Mac, No need for CLANG_RESOURCE_DIR when this is part of the argument.
-        adjustedArgs.push_back("-mno-sse");
+        adjustedArgsTemp.push_back("-mno-sse");

-        adjustedArgs.push_back("-fsyntax-only");
 #ifdef Q_OS_WIN
-        adjustedArgs.push_back("-fms-compatibility-version=19");
-        adjustedArgs.push_back("-DQ_COMPILER_UNIFORM_INIT");    // qtbase + clang-cl hack
+        adjustedArgsTemp.push_back("-fms-compatibility-version=19");
+        adjustedArgsTemp.push_back("-DQ_COMPILER_UNIFORM_INIT"); // qtbase + clang-cl hack
         // avoid constexpr error connected with offsetof (QTBUG-97380)
-        adjustedArgs.push_back("-D_CRT_USE_BUILTIN_OFFSETOF");
+        adjustedArgsTemp.push_back("-D_CRT_USE_BUILTIN_OFFSETOF");
 #endif
-        adjustedArgs.push_back("-Wno-everything");
+        adjustedArgsTemp.push_back("-Wno-everything");

         for (const QByteArray &flag : compilerIncludeFlags)
-            adjustedArgs.push_back(flag.data());
+            adjustedArgsTemp.push_back(flag.data());

         for (auto alias : aliasDefinition) {
-            adjustedArgs.push_back(alias);
+            adjustedArgsTemp.push_back(alias);
         }
+
+        clang::tooling::CommandLineArguments::iterator it = llvm::find(adjustedArgs, "--");
+        adjustedArgs.insert(it, adjustedArgsTemp.begin(), adjustedArgsTemp.end());
         return adjustedArgs;
     };
 }
@@ -461,7 +458,11 @@
     ReadSynchronizedRef<std::string> ppSources(sources);
     WriteSynchronizedRef<TranslationRelatedStore> ppStore(stores.Preprocessor);
     size_t idealProducerCount = std::min(ppSources.size(), size_t(std::thread::hardware_concurrency()));
-    clang::tooling::ArgumentsAdjuster argumentsAdjuster = getClangArgumentAdjuster();
+    clang::tooling::ArgumentsAdjuster argumentsAdjusterSyntaxOnly =
+            clang::tooling::getClangSyntaxOnlyAdjuster();
+    clang::tooling::ArgumentsAdjuster argumentsAdjusterLocal = getClangArgumentAdjuster();
+    clang::tooling::ArgumentsAdjuster argumentsAdjuster =
+            clang::tooling::combineAdjusters(argumentsAdjusterLocal, argumentsAdjusterSyntaxOnly);

     for (size_t i = 0; i < idealProducerCount; ++i) {
         std::thread producer([&ppSources, &db, &ppStore, &argumentsAdjuster]() {
diff -Nuar a/src/linguist/lupdate/lupdatepreprocessoraction.cpp b/src/linguist/lupdate/lupdatepreprocessoraction.cpp
--- a/src/linguist/lupdate/lupdatepreprocessoraction.cpp	2022-09-23 14:50:40.000000000 +0300
+++ b/src/linguist/lupdate/lupdatepreprocessoraction.cpp	2023-01-19 12:01:15.475030465 +0300
@@ -144,7 +144,7 @@
     const char *end = sm.getCharacterData(sourceRange.getEnd());
     llvm::StringRef skippedText = llvm::StringRef(begin, end - begin);
     if (ClangCppParser::stringContainsTranslationInformation(skippedText)) {
-        qCDebug(lcClang) << "SourceRangeSkipped: skipped text:" << skippedText.str();
+        qCDebug(lcClang) << "SourceRangeSkipped: skipped text:" << QString::fromStdString(skippedText.str());
         unsigned int beginLine = sm.getExpansionLineNumber(sourceRange.getBegin());
         unsigned int endLine = sm.getExpansionLineNumber(sourceRange.getEnd());
         qWarning("%s Code with translation information has been skipped "
@@ -156,14 +156,23 @@
 // To list the included files
 void LupdatePPCallbacks::InclusionDirective(clang::SourceLocation /*hashLoc*/,
     const clang::Token & /*includeTok*/, clang::StringRef /*fileName*/, bool /*isAngled*/,
-    clang::CharSourceRange /*filenameRange*/, const clang::FileEntry *file,
+    clang::CharSourceRange /*filenameRange*/,
+#if (LUPDATE_CLANG_VERSION >= LUPDATE_CLANG_VERSION_CHECK(15,0,0))
+    const clang::Optional<clang::FileEntryRef> file,
+#else
+    const clang::FileEntry *file,
+#endif
     clang::StringRef /*searchPath*/, clang::StringRef /*relativePath*/,
     const clang::Module */*imported*/, clang::SrcMgr::CharacteristicKind /*fileType*/)
 {
     if (!file)
         return;

-    clang::StringRef fileNameRealPath = file->tryGetRealPathName();
+    clang::StringRef fileNameRealPath = file->
+#if (LUPDATE_CLANG_VERSION >= LUPDATE_CLANG_VERSION_CHECK(15,0,0))
+        getFileEntry().
+#endif
+        tryGetRealPathName();
     if (!LupdatePrivate::isFileSignificant(fileNameRealPath.str()))
         return;

diff -Nuar a/src/linguist/lupdate/lupdatepreprocessoraction.h b/src/linguist/lupdate/lupdatepreprocessoraction.h
--- a/src/linguist/lupdate/lupdatepreprocessoraction.h	2022-09-23 14:50:40.000000000 +0300
+++ b/src/linguist/lupdate/lupdatepreprocessoraction.h	2023-01-19 12:01:57.650503199 +0300
@@ -51,7 +51,12 @@
     void SourceRangeSkipped(clang::SourceRange sourceRange, clang::SourceLocation endifLoc) override;
     void InclusionDirective(clang::SourceLocation /*hashLoc*/, const clang::Token &/*includeTok*/,
                             clang::StringRef /*fileName*/, bool /*isAngled*/,
-                            clang::CharSourceRange /*filenameRange*/, const clang::FileEntry *file,
+                            clang::CharSourceRange /*filenameRange*/,
+#if (LUPDATE_CLANG_VERSION >= LUPDATE_CLANG_VERSION_CHECK(15,0,0))
+                            const clang::Optional<clang::FileEntryRef> file,
+#else
+                            const clang::FileEntry *file,
+#endif
                             clang::StringRef /*searchPath*/, clang::StringRef /*relativePath*/,
                             const clang::Module */*imported*/,
                             clang::SrcMgr::CharacteristicKind /*fileType*/) override;
